const path = require("path");
const settings = require("./src/config/settings")

const {
  publicPath,
  assetsDir,
  outputDir,
  lintOnSave,
  devPort,
} = require("./src/config/settings");

const CompressionPlugin = require('compression-webpack-plugin');

function resolve(dir) {
  return path.join(__dirname, dir);
}

function addStyleResource(rule) {
  rule
    .use("style-resource")
    .loader("style-resources-loader")
    .options({
      patterns: [
        path.resolve(__dirname, "src/assets/stylus/style.less") // 需要全局导入的less
      ]
    })
}

module.exports = {
  // 默认静态访问路径
  publicPath, // 服务部署后访问路径前缀，默认“/”
  // 静态资源储存路径
  assetsDir,
  // 输出文件路径
  outputDir,
  // 热更新
  runtimeCompiler: true,
  lintOnSave,
  css: {
    // 是否将组件中的 CSS 提取至一个独立的 CSS 文件中
    extract: false,
    loaderOptions: {
      less: {
        modifyVars: {
          'primary-color': '#4dd2ff',
          'link-color': '#1DA57A',
          'border-radius-base': '2px',
        },
        javascriptEnabled: true
      }
    }
  },
  devServer: {
    host: '0.0.0.0',
    hot: true,
    open: true,
    port: devPort,
    noInfo: false,
    overlay: {
      warnings: false,
      errors: true,
    },
  },
  // 打包动态版本号
  filenameHashing: true,
  // 是否为 Babel 或 TypeScript 使用 thread-loader
  parallel: false,
  chainWebpack: config => {
    // config.entry('polyfill').add('@babel/polyfill')
    // config.entry.app = ["babel-polyfill", resolve('src/main.js')]
    // 路径别名配置

    config.resolve.alias

      .set("@", resolve('src'));
    config.resolve.symlinks(true);

    config.plugin('html')
      .tap(args => {
        args[0].title = settings.title
        return args
      });


    const types = ["vue-modules", "vue", "normal-modules", "normal"]
    types.forEach(type =>
      addStyleResource(config.module.rule("less").oneOf(type))
    );
  },
  // // webpack 配置
  configureWebpack: config => {
    // 打包去除console.log配置
    if (process.env.NODE_ENV === 'production') {
      config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true
    }
    // 解决chunk-vendors文件过大
    config.plugins = [
      ...config.plugins,
      new CompressionPlugin({
        test: /\.js$|\.html$|\.css$/, // 匹配文件名
        // filename: '[path].gz[query]', // 压缩后的文件名(保持原文件名，后缀加.gz)
        minRatio: 1, // 压缩率小于1才会压缩
        threshold: 10240, // 对超过10k的数据压缩
        deleteOriginalAssets: false  // 删除源文件
      })
    ]
  }
};
